from django.db import models

from management.models import User, Role


# Create your models here.

# 工作流模型
class Workflow(models.Model):
    id = models.AutoField(primary_key=True)  # 主键自增，可以省略
    name = models.CharField(max_length=50, unique=True)  # 名称，唯一
    params = models.TextField()  # 参数字段，json序列化存储（注意：Django 3.1及更高版本使用JSONField，否则您可能需要使用TextField并手动处理JSON）
    status = models.IntegerField(choices=((1, '可用'), (2, '停用')))  # 状态，1可用 2停用

    def __str__(self):
        return self.name

    # 工作流权限模型
    class Meta:
        db_table = 'workflow'


class WorkflowPermission(models.Model):
    id = models.AutoField(primary_key=True)  # 主键自增，可以省略
    role_id = models.ForeignKey(Role, on_delete=models.CASCADE)  # 角色id，外键关联角色表（注意：这里假设您有一个Role模型）
    workflow_id = models.ForeignKey(Workflow, on_delete=models.CASCADE)  # 工作流id，外键关联工作流表

    def __str__(self):
        return f"{self.role_id.name} - {self.workflow_id.name}"  # 假设Role模型有一个name字段

    class Meta:
        db_table = 'workflow_permission'


# 注意：这里缺少Role模型的定义，您需要根据您的需求定义它。

# 工作流审批节点配置模型
class WorkflowApprovalNode(models.Model):
    id = models.AutoField(primary_key=True)  # 主键自增，可以省略
    workflow_id = models.ForeignKey(Workflow, on_delete=models.CASCADE)  # 工作流id，外键关联工作流表
    role_id = models.ForeignKey(Role, on_delete=models.CASCADE)  # 职位id，外键关联角色表（注意：这里同样假设您有一个Role模型）
    level = models.IntegerField()  # 步骤

    def __str__(self):
        return f"{self.workflow_id.name} - Level {self.level}"  # 假设有一个友好的显示格式

    class Meta:
        db_table = 'workflow_approval_node'


# 任务模型
class Task(models.Model):
    id = models.AutoField(primary_key=True)  # 主键自增，可以省略
    name = models.CharField(max_length=30)  # 任务名称
    params = models.TextField()  # 参数字段，json序列化存储（注意JSONField的使用条件）
    workflow_id = models.ForeignKey(Workflow, on_delete=models.CASCADE)  # 工作流id，外键关联工作流表
    userid = models.ForeignKey(User, on_delete=models.CASCADE)  # 用户id，外键关联用户表（注意：这里使用了自定义的用户模型）
    next_audit = models.ForeignKey(User, on_delete=models.SET_NULL, null=True,
                                   related_name='next_audit_user')  # 下一操作人id，可以为空
    task_status = models.IntegerField(choices=((1, '新建'), (2, '审批中'), (3, '完成')))  # 任务状态

    def __str__(self):
        return self.name

    # 审批记录模型
    class Meta:
        db_table = 'task'


class AuditRecord(models.Model):
    id = models.AutoField(primary_key=True)  # 主键自增，可以省略
    task_id = models.ForeignKey(Task, on_delete=models.CASCADE)  # 任务id，外键关联任务表
    audit_user = models.ForeignKey(User, on_delete=models.CASCADE)  # 操作人id
    audit_time = models.DateTimeField(auto_now_add=True)  # 操作时间，自动添加当前时间
    audit_status = models.IntegerField()  # 审核状态（这里可能需要定义更多的状态选项）

    def __str__(self):
        return f"{self.task_id.name} - {self.audit_user.name} - {self.audit_time}"  # 假设有一个友好的显示格式

    class Meta:
        db_table = 'audit_record'
